package tenumn.energytech.registrys;

import io.github.uicdb.liba.api.register.ItemHolder;
import io.github.uicdb.liba.api.register.LazyRegistry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.*;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.model.generators.ItemModelBuilder;
import net.minecraftforge.client.model.generators.ItemModelProvider;
import net.minecraftforge.client.model.generators.ModelFile;
import net.minecraftforge.client.model.generators.ModelFile.UncheckedModelFile;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import tenumn.energytech.EnergyTech;
import tenumn.energytech.registrys.item.ItemChargedCrystal;
import tenumn.energytech.registrys.item.ItemEneteBattery;
import tenumn.energytech.registrys.item.ItemLithiumBattery;

import java.util.function.BiConsumer;

@SuppressWarnings("unused")
public class ItemRegistry {
    private static final LazyRegistry registry = EnergyTech.LAZY_REGISTRY;
    public static final ItemHolder<ItemChargedCrystal> CHARGED_CRYSTAL=registry.item("charged_crystal",ItemChargedCrystal::new)
            .propertie(properties -> properties.stacksTo(1))
            .build();
    public static final ItemHolder<Item> ALUMINIUM_DUST = registry.item("aluminium_dust", Item::new)
            .name("zh_cn","铝粉")
            .build();
    public static final ItemHolder<Item> ALUMINIUM_INGOT = registry.item("aluminium_ingot", Item::new)
            .name("zh_cn","铝锭")
            .tag(TagRegistry.ALUMINIUM_INGOT)
            .build();
    public static final ItemHolder<Item> ALUMINIUM_PLATE = registry.item("aluminium_plate", Item::new)
            .name("zh_cn","铝板")
            .build();
    public static final ItemHolder<AxeItem> ANTIMONY_AXE = registry.axe("antimony_axe", TierRegistry.ANTIMONY)
            .name("zh_cn","铝斧")
            .build();
    public static final ItemHolder<Item> ANTIMONY_DUST = registry.item("antimony_dust", Item::new)
            .name("zh_cn","锑粉")
            .build();
    public static final ItemHolder<HoeItem> ANTIMONY_HOE = registry.hoe("antimony_hoe", TierRegistry.ANTIMONY)
            .name("zh_cn","锑锄")
            .build();
    public static final ItemHolder<Item> ANTIMONY_INGOT = registry.item("antimony_ingot", Item::new)
            .name("zh_cn","锑锭")
            .tag(TagRegistry.ANTIMONY_INGOT)
            .build();
    public static final ItemHolder<PickaxeItem> ANTIMONY_PICKAXE = registry.pickaxe("antimony_pickaxe", TierRegistry.ANTIMONY)
            .name("zh_cn","锑镐")
            .build();
    public static final ItemHolder<Item> ANTIMONY_PLATE = registry.item("antimony_plate", Item::new)
            .name("zh_cn","锑板")
            .build();
    public static final ItemHolder<ShovelItem> ANTIMONY_SHOVEL = registry.shovel("antimony_shovel", TierRegistry.ANTIMONY)
            .name("zh_cn","锑铲")
            .build();
    public static final ItemHolder<SwordItem> ANTIMONY_SWORD = registry.sword("antimony_sword", TierRegistry.ANTIMONY)
            .name("zh_cn","锑剑")
            .build();
    public static final ItemHolder<Item> BOOTS_TEMPLATE = registry.item("boots_template", Item::new)
            .name("zh_cn","鞋模板")
            .build();
    public static final ItemHolder<AxeItem> BRONZE_AXE = registry.axe("bronze_axe",TierRegistry.BRONZE)
            .name("zh_cn","青铜斧")
            .build();
    public static final ItemHolder<Item> BRONZE_CUTTER = registry.item("bronze_cutter", Item::new)
            .name("zh_cn","青铜切")
            .build();
    public static final ItemHolder<Item> BRONZE_DUST = registry.item("bronze_dust", Item::new)
            .name("zh_cn","青铜粉")
            .build();
    public static final ItemHolder<Item> BRONZE_FILE = registry.item("bronze_file", Item::new)
            .name("zh_cn","青铜File")
            .build();
    public static final ItemHolder<Item> BRONZE_GEAR = registry.item("bronze_gear", Item::new)
            .name("zh_cn","青铜齿轮")
            .build();
    public static final ItemHolder<Item> BRONZE_HAMMER = registry.item("bronze_hammer", Item::new)
            .name("zh_cn","青铜锤")
            .build();
    public static final ItemHolder<HoeItem> BRONZE_HOE = registry.hoe("bronze_hoe", TierRegistry.BRONZE)
            .name("zh_cn","青铜锄")
            .build();
    public static final ItemHolder<Item> BRONZE_INGOT = registry.item("bronze_ingot", Item::new)
            .name("zh_cn","青铜锭")
            .tag(TagRegistry.BRONZE_INGOT)
            .build();
    public static final ItemHolder<FlintAndSteelItem> BRONZE_LIGHTER = registry.item("bronze_lighter", FlintAndSteelItem::new)
            .propertie(properties -> properties.durability(50))
            .name("zh_cn","青铜火机")
            .build();
    public static final ItemHolder<Item> BRONZE_MORTAR = registry.item("bronze_mortar", Item::new)
            .build();
    public static final ItemHolder<PickaxeItem> BRONZE_PICKAXE = registry.pickaxe("bronze_pickaxe", TierRegistry.BRONZE)
            .build();
    public static final ItemHolder<Item> BRONZE_PLATE = registry.item("bronze_plate", Item::new)
            .build();
    public static final ItemHolder<Item> BRONZE_RING = registry.item("bronze_ring", Item::new)
            .build();
    public static final ItemHolder<ShovelItem> BRONZE_SHOVEL = registry.shovel("bronze_shovel", TierRegistry.BRONZE)
            .build();
    public static final ItemHolder<Item> BRONZE_STICK = registry.item("bronze_stick", Item::new)
            .build();
    public static final ItemHolder<SwordItem> BRONZE_SWORD = registry.sword("bronze_sword", TierRegistry.BRONZE)
            .build();
    public static final ItemHolder<Item> BRONZE_WRENCH = registry.item("bronze_wrench", Item::new)
            .build();
    public static final ItemHolder<Item> CARBON_DUST = registry.item("carbon_dust", Item::new)
            .build();
    public static final ItemHolder<Item> CARBON_PLATE = registry.item("carbon_plate", Item::new)
            .build();
    public static final ItemHolder<Item> CHESTPLATE_TEMPLATE = registry.item("chestplate_template", Item::new)
            .build();
    public static final ItemHolder<Item> CIRCUIT = registry.item("circuit", Item::new)
            .build();
    public static final ItemHolder<Item> CIRCUIT_ENERGY_STORAGE = registry.item("circuit_energy_storage", Item::new)
            .build();
    public static final ItemHolder<Item> CIRCUIT_MUFFLER = registry.item("circuit_muffler", Item::new)
            .build();
    public static final ItemHolder<Item> CIRCUIT_OVERCLOCKER = registry.item("circuit_overclocker", Item::new)
            .build();
    public static final ItemHolder<Item> CIRCUIT_PLATE = registry.item("circuit_plate", Item::new)
            .build();
    public static final ItemHolder<Item> CIRCUIT_TRANSFORMER = registry.item("circuit_transformer", Item::new)
            .build();
    public static final ItemHolder<Item> COOLANT_CELL_HELIUM_0 = registry.item("coolant_cell_helium_0", Item::new)
            .build();
    public static final ItemHolder<Item> COOLANT_CELL_HELIUM_1 = registry.item("coolant_cell_helium_1", Item::new)
            .build();
    public static final ItemHolder<Item> COOLANT_CELL_HELIUM_2 = registry.item("coolant_cell_helium_2", Item::new)
            .build();
    public static final ItemHolder<Item> COOLANT_CELL_WATER_0 = registry.item("coolant_cell_water_0", Item::new)
            .build();
    public static final ItemHolder<Item> COOLANT_CELL_WATER_1 = registry.item("coolant_cell_water_1", Item::new)
            .build();
    public static final ItemHolder<Item> COOLANT_CELL_WATER_2 = registry.item("coolant_cell_water_2", Item::new)
            .build();
    public static final ItemHolder<AxeItem> COPPER_AXE = registry.axe("copper_axe", TierRegistry.COPPER)
            .build();
    public static final ItemHolder<Item> COPPER_DUST = registry.item("copper_dust", Item::new)
            .build();
    public static final ItemHolder<HoeItem> COPPER_HOE = registry.hoe("copper_hoe", TierRegistry.COPPER)
            .build();
    public static final ItemHolder<Item> COPPER_PART = registry.item("copper_part", Item::new)
            .build();
    public static final ItemHolder<PickaxeItem> COPPER_PICKAXE = registry.pickaxe("copper_pickaxe", TierRegistry.COPPER)
            .build();
    public static final ItemHolder<Item> COPPER_PLATE = registry.item("copper_plate", Item::new)
            .build();
    public static final ItemHolder<ShovelItem> COPPER_SHOVEL = registry.shovel("copper_shovel", TierRegistry.COPPER)
            .build();
    public static final ItemHolder<Item> COPPER_STICK = registry.item("copper_stick", Item::new)
            .build();
    public static final ItemHolder<SwordItem> COPPER_SWORD = registry.sword("copper_sword", TierRegistry.COPPER)
            .build();
    public static final ItemHolder<Item> COPPER_WIRE = registry.item("copper_wire", Item::new)
            .build();
    public static final ItemHolder<Item> COVER_ENERGY_DISPLAY = registry.item("cover_energy_display", Item::new)
            .build();
    public static final ItemHolder<Item> COVER_PROGRESS_DISPLAY = registry.item("cover_progress_display", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_BAUXITE = registry.item("crushed_bauxite", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_CASSITERITE = registry.item("crushed_cassiterite", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_COPPER = registry.item("crushed_copper", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_GALENA = registry.item("crushed_galena", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_GOLD = registry.item("crushed_gold", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_IRON = registry.item("crushed_iron", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_SILVER = registry.item("crushed_silver", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_SPODUMENE = registry.item("crushed_spodumene", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_TETRAHEDRITE = registry.item("crushed_tetrahedrite", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_TUNGSTEN = registry.item("crushed_tungsten", Item::new)
            .build();
    public static final ItemHolder<Item> CRUSHED_URANIUM = registry.item("crushed_uranium", Item::new)
            .build();
    public static final ItemHolder<Item> DEUTERIUM_CELL = registry.item("deuterium_cell", Item::new)
            .build();
    public static final ItemHolder<Item> DIAMOND_DUST = registry.item("diamond_dust", Item::new)
            .build();
    public static final ItemHolder<Item> DISTILLED_WATER_CELL = registry.item("distilled_water_cell", Item::new)
            .build();
    public static final ItemHolder<Item> DRILL = registry.item("drill", Item::new)
            .build();
    public static final ItemHolder<Item> ELECTRIC_MOTOR = registry.item("electric_motor", Item::new)
            .build();
    public static final ItemHolder<Item> ELECTRIC_PISTON = registry.item("electric_piston", Item::new)
            .build();
    public static final ItemHolder<Item> EMPTY_CELL = registry.item("empty_cell", Item::new)
            .build();
    public static final ItemHolder<Item> ENDER_DUST = registry.item("ender_dust", Item::new)
            .build();
    public static final ItemHolder<Item> ENERGIUM_DUST = registry.item("energium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> ENERGY_CARD = registry.item("energy_card", Item::new)
            .build();
    public static final ItemHolder<ItemEneteBattery> ENETE_BATTERY = registry.item("enete_battery", ItemEneteBattery::new)
            .model(energyMultiModel(10))
            .propertie(properties -> properties.stacksTo(1))
            .build();
    public static final ItemHolder<Item> ENETE_DUST = registry.item("enete_dust", Item::new)
            .build();
    public static final ItemHolder<Item> ENETE_INGOT = registry.item("enete_ingot", Item::new)
            .tag(TagRegistry.ENETE_INGOT)
            .build();
    public static final ItemHolder<Item> ENETE_PART = registry.item("enete_part", Item::new)
            .build();
    public static final ItemHolder<Item> ENETE_PLATE = registry.item("enete_plate", Item::new)
            .build();
    public static final ItemHolder<Item> ENETE_STICK = registry.item("enete_stick", Item::new)
            .build();
    public static final ItemHolder<Item> ENRICHED_URANIUM_0 = registry.item("enriched_uranium_0", Item::new)
            .build();
    public static final ItemHolder<Item> ENRICHED_URANIUM_1 = registry.item("enriched_uranium_1", Item::new)
            .build();
    public static final ItemHolder<AxeItem> FLINT_AXE = registry.axe("flint_axe", TierRegistry.FLINT)
            .build();
    public static final ItemHolder<Item> FLINT_DUST = registry.item("flint_dust", Item::new)
            .build();
    public static final ItemHolder<HoeItem> FLINT_HOE = registry.hoe("flint_hoe", TierRegistry.FLINT)
            .build();
    public static final ItemHolder<PickaxeItem> FLINT_PICKAXE = registry.pickaxe("flint_pickaxe", TierRegistry.FLINT)
            .build();
    public static final ItemHolder<ShovelItem> FLINT_SHOVEL = registry.shovel("flint_shovel", TierRegistry.FLINT)
            .build();
    public static final ItemHolder<SwordItem> FLINT_SWORD = registry.sword("flint_sword", TierRegistry.FLINT)
            .build();
    public static final ItemHolder<Item> FUEL_ROD_DEPLETED_URANIUM_0 = registry.item("fuel_rod_depleted_uranium_0", Item::new)
            .build();
    public static final ItemHolder<Item> FUEL_ROD_DEPLETED_URANIUM_1 = registry.item("fuel_rod_depleted_uranium_1", Item::new)
            .build();
    public static final ItemHolder<Item> FUEL_ROD_DEPLETED_URANIUM_2 = registry.item("fuel_rod_depleted_uranium_2", Item::new)
            .build();
    public static final ItemHolder<Item> FUEL_ROD_URANIUM_0 = registry.item("fuel_rod_uranium_0", Item::new)
            .build();
    public static final ItemHolder<Item> FUEL_ROD_URANIUM_1 = registry.item("fuel_rod_uranium_1", Item::new)
            .build();
    public static final ItemHolder<Item> FUEL_ROD_URANIUM_2 = registry.item("fuel_rod_uranium_2", Item::new)
            .build();
    public static final ItemHolder<Item> GOLD_DUST = registry.item("gold_dust", Item::new)
            .build();
    public static final ItemHolder<Item> GOLD_PART = registry.item("gold_part", Item::new)
            .build();
    public static final ItemHolder<Item> GOLD_PLATE = registry.item("gold_plate", Item::new)
            .build();
    public static final ItemHolder<Item> GOLD_STICK = registry.item("gold_stick", Item::new)
            .build();
    public static final ItemHolder<Item> GOLD_WIRE = registry.item("gold_wire", Item::new)
            .build();
    public static final ItemHolder<Item> HEAT_SINK = registry.item("heat_sink", Item::new)
            .build();
    public static final ItemHolder<Item> HEAVY_WATER_CELL = registry.item("heavy_water_cell", Item::new)
            .build();
    public static final ItemHolder<Item> HELIUM3_CELL = registry.item("helium3_cell", Item::new)
            .build();
    public static final ItemHolder<Item> HELIUM_CELL = registry.item("helium_cell", Item::new)
            .build();
    public static final ItemHolder<Item> HELMET_TEMPLATE = registry.item("helmet_template", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_BAUXITE_DUST = registry.item("impure_bauxite_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_CASSITERITE_DUST = registry.item("impure_cassiterite_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_COPPER_DUST = registry.item("impure_copper_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_GALENA_DUST = registry.item("impure_galena_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_GOLD_DUST = registry.item("impure_gold_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_IRON_DUST = registry.item("impure_iron_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_LITHIUM_DUST = registry.item("impure_lithium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_SILVER_DUST = registry.item("impure_silver_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_TETRAHEDRITE_DUST = registry.item("impure_tetrahedrite_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_TUNGSTEN_DUST = registry.item("impure_tungsten_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IMPURE_URANIUM_DUST = registry.item("impure_uranium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_CUTTER = registry.item("iron_cutter", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_DUST = registry.item("iron_dust", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_FILE = registry.item("iron_file", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_GEAR = registry.item("iron_gear", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_HAMMER = registry.item("iron_hammer", Item::new)
            .build();
    public static final ItemHolder<FlintAndSteelItem> IRON_LIGHTER = registry.item("iron_lighter", FlintAndSteelItem::new)
            .propertie(properties -> properties.durability(50))
            .build();
    public static final ItemHolder<Item> IRON_MORTAR = registry.item("iron_mortar", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_PART = registry.item("iron_part", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_PLATE = registry.item("iron_plate", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_RING = registry.item("iron_ring", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_STICK = registry.item("iron_stick", Item::new)
            .build();
    public static final ItemHolder<Item> IRON_WRENCH = registry.item("iron_wrench", Item::new)
            .build();
    public static final ItemHolder<Item> LAPIS_PLATE = registry.item("lapis_plate", Item::new)
            .build();
    public static final ItemHolder<Item> LAPIS_STICK = registry.item("lapis_stick", Item::new)
            .build();
    public static final ItemHolder<Item> LAVA_CELL = registry.item("lava_cell", Item::new)
            .build();
    public static final ItemHolder<Item> LEAD_ANTIMONY_DUST = registry.item("lead_antimony_dust", Item::new)
            .build();
    public static final ItemHolder<Item> LEAD_ANTIMONY_INGOT_0 = registry.item("lead_antimony_ingot_0", Item::new)
            .build();
    public static final ItemHolder<Item> LEAD_ANTIMONY_PART = registry.item("lead_antimony_part", Item::new)
            .build();
    public static final ItemHolder<Item> LEAD_ANTIMONY_PLATE = registry.item("lead_antimony_plate", Item::new)
            .build();
    public static final ItemHolder<Item> LEAD_ANTIMONY_STICK = registry.item("lead_antimony_stick", Item::new)
            .build();
    public static final ItemHolder<AxeItem> LEAD_AXE = registry.axe("lead_axe", TierRegistry.LEAD)
            .build();
    public static final ItemHolder<Item> LEAD_DUST = registry.item("lead_dust", Item::new)
            .build();
    public static final ItemHolder<HoeItem> LEAD_HOE = registry.hoe("lead_hoe", TierRegistry.LEAD)
            .build();
    public static final ItemHolder<Item> LEAD_INGOT = registry.item("lead_ingot", Item::new)
            .tag(TagRegistry.LEAD_INGOT)
            .build();
    public static final ItemHolder<PickaxeItem> LEAD_PICKAXE = registry.pickaxe("lead_pickaxe", TierRegistry.LEAD)
            .build();
    public static final ItemHolder<Item> LEAD_PLATE = registry.item("lead_plate", Item::new)
            .build();
    public static final ItemHolder<ShovelItem> LEAD_SHOVEL = registry.shovel("lead_shovel", TierRegistry.LEAD)
            .build();
    public static final ItemHolder<SwordItem> LEAD_SWORD = registry.sword("lead_sword", TierRegistry.LEAD)
            .build();
    public static final ItemHolder<Item> LEGGINGS_TEMPLATE = registry.item("leggings_template", Item::new)
            .build();
    public static final ItemHolder<Item> LITHIUM6 = registry.item("lithium6", Item::new)
            .build();
    public static final ItemHolder<Item> LITHIUM6_CELL = registry.item("lithium6_cell", Item::new)
            .build();
    public static final ItemHolder<Item> LITHIUM7 = registry.item("lithium7", Item::new)
            .build();
    public static final ItemHolder<Item> LITHIUM7_CELL = registry.item("lithium7_cell", Item::new)
            .build();
    public static final ItemHolder<ItemLithiumBattery> LITHIUM_BATTERY = registry.item("lithium_battery", ItemLithiumBattery::new)
            .model(energyMultiModel(7))
            .propertie(properties -> properties.stacksTo(1))
            .build();
    public static final ItemHolder<Item> LITHIUM_DUST = registry.item("lithium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> LITHIUM_INGOT = registry.item("lithium_ingot", Item::new)
            .tag(TagRegistry.LITHIUM_INGOT)
            .build();
    public static final ItemHolder<Item> NEUTRON_REFLECTOR = registry.item("neutron_reflector", Item::new)
            .build();
    public static final ItemHolder<Item> PLASTIC_PLATE = registry.item("plastic_plate", Item::new)
            .build();
    public static final ItemHolder<Item> POWERED_BOOTS = registry.item("powered_boots", Item::new)
            .build();
    public static final ItemHolder<Item> POWERED_CHESTPLATE = registry.item("powered_chestplate", Item::new)
            .build();
    public static final ItemHolder<Item> POWERED_HELMET = registry.item("powered_helmet", Item::new)
            .build();
    public static final ItemHolder<Item> POWERED_LEGGINGS = registry.item("powered_leggings", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_BAUXITE = registry.item("purified_bauxite", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_CASSITERITE = registry.item("purified_cassiterite", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_COPPER = registry.item("purified_copper", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_GALENA = registry.item("purified_galena", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_GOLD = registry.item("purified_gold", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_IRON = registry.item("purified_iron", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_SILVER = registry.item("purified_silver", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_SPODUMENE = registry.item("purified_spodumene", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_TETRAHEDRITE = registry.item("purified_tetrahedrite", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_TUNGSTEN = registry.item("purified_tungsten", Item::new)
            .build();
    public static final ItemHolder<Item> PURIFIED_URANIUM = registry.item("purified_uranium", Item::new)
            .build();
    public static final ItemHolder<Item> RESIN = registry.item("resin", Item::new)
            .build();
    public static final ItemHolder<Item> RUBY = registry.item("ruby", Item::new)
            .build();
    public static final ItemHolder<Item> RUBY_DUST = registry.item("ruby_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SALT_DUST = registry.item("salt_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SILICON_DIOXIDE_DUST = registry.item("silicon_dioxide_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SILICON_DUST = registry.item("silicon_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SILICON_INGOT = registry.item("silicon_ingot", Item::new)
            .tag(TagRegistry.SILICON_INGOT)
            .build();
    public static final ItemHolder<Item> SILVER_DUST = registry.item("silver_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SILVER_INGOT = registry.item("silver_ingot", Item::new)
            .tag(TagRegistry.SILVER_INGOT)
            .build();
    public static final ItemHolder<Item> SLAG = registry.item("slag", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_ALUMINIUM_DUST = registry.item("small_aluminium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_ANTIMONY_DUST = registry.item("small_antimony_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_BRONZE_DUST = registry.item("small_bronze_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_CARBON_DUST = registry.item("small_carbon_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_COPPER_DUST = registry.item("small_copper_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_DIAMOND_DUST = registry.item("small_diamond_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_ENDER_DUST = registry.item("small_ender_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_ENERGIUM_DUST = registry.item("small_energium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_ENETE_DUST = registry.item("small_enete_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_FLINT_DUST = registry.item("small_flint_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_GOLD_DUST = registry.item("small_gold_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_IRON_DUST = registry.item("small_iron_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_LEAD_ANTIMONY_DUST = registry.item("small_lead_antimony_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_LEAD_DUST = registry.item("small_lead_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_LITHIUM6 = registry.item("small_lithium6", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_LITHIUM7 = registry.item("small_lithium7", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_LITHIUM_DUST = registry.item("small_lithium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_REDSTONE_DUST = registry.item("small_redstone_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_RUBY_DUST = registry.item("small_ruby_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_SALT_DUST = registry.item("small_salt_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_SILICON_DIOXIDE_DUST = registry.item("small_silicon_dioxide_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_SILICON_DUST = registry.item("small_silicon_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_SILVER_DUST = registry.item("small_silver_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_STEEL_DUST = registry.item("small_steel_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_STONE = registry.item("small_stone", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_STONE_DUST = registry.item("small_stone_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_TETRAHEDRITE_DUST = registry.item("small_tetrahedrite_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_TIN_DUST = registry.item("small_tin_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_TUNGSTEN_DUST = registry.item("small_tungsten_dust", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_URANIUM235 = registry.item("small_uranium235", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_URANIUM238 = registry.item("small_uranium238", Item::new)
            .build();
    public static final ItemHolder<Item> SMALL_URANIUM_DUST = registry.item("small_uranium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> STEAM_CELL = registry.item("steam_cell", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_AXE = registry.item("steel_axe", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_CUTTER = registry.item("steel_cutter", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_DUST = registry.item("steel_dust", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_FILE = registry.item("steel_file", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_GEAR = registry.item("steel_gear", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_HAMMER = registry.item("steel_hammer", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_HOE = registry.item("steel_hoe", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_INGOT = registry.item("steel_ingot", Item::new)
            .tag(TagRegistry.STEEL_INGOT)
            .build();
    public static final ItemHolder<FlintAndSteelItem> STEEL_LIGHTER = registry.item("steel_lighter", FlintAndSteelItem::new)
            .propertie(properties -> properties.durability(50))
            .build();
    public static final ItemHolder<Item> STEEL_MORTAR = registry.item("steel_mortar", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_PART = registry.item("steel_part", Item::new)
            .build();
    public static final ItemHolder<PickaxeItem> STEEL_PICKAXE = registry.pickaxe("steel_pickaxe", TierRegistry.STEEL)
            .build();
    public static final ItemHolder<Item> STEEL_PLATE = registry.item("steel_plate", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_RING = registry.item("steel_ring", Item::new)
            .build();
    public static final ItemHolder<ShovelItem> STEEL_SHOVEL = registry.shovel("steel_shovel", TierRegistry.STEEL)
            .build();
    public static final ItemHolder<Item> STEEL_STICK = registry.item("steel_stick", Item::new)
            .build();
    public static final ItemHolder<SwordItem> STEEL_SWORD = registry.sword("steel_sword",TierRegistry.STEEL)
            .build();
    public static final ItemHolder<Item> STEEL_WIRE = registry.item("steel_wire", Item::new)
            .build();
    public static final ItemHolder<Item> STEEL_WRENCH = registry.item("steel_wrench", Item::new)
            .build();
    public static final ItemHolder<Item> STONE_DUST = registry.item("stone_dust", Item::new)
            .build();
    public static final ItemHolder<Item> TETRAHEDRITE_DUST = registry.item("tetrahedrite_dust", Item::new)
            .build();
    public static final ItemHolder<Item> TINY_CHARCOAL = registry.item("tiny_charcoal", Item::new)
            .build();
    public static final ItemHolder<Item> TINY_COAL = registry.item("tiny_coal", Item::new)
            .build();
    public static final ItemHolder<AxeItem> TIN_AXE = registry.axe("tin_axe",TierRegistry.TIN)
            .build();
    public static final ItemHolder<Item> TIN_CUTTER = registry.item("tin_cutter", Item::new)
            .build();
    public static final ItemHolder<Item> TIN_DUST = registry.item("tin_dust", Item::new)
            .build();
    public static final ItemHolder<Item> TIN_FILE = registry.item("tin_file", Item::new)
            .build();
    public static final ItemHolder<Item> TIN_HAMMER = registry.item("tin_hammer", Item::new)
            .build();
    public static final ItemHolder<HoeItem> TIN_HOE = registry.hoe("tin_hoe",TierRegistry.TIN )
            .build();
    public static final ItemHolder<Item> TIN_INGOT = registry.item("tin_ingot", Item::new)
            .tag(TagRegistry.TIN_INGOT)
            .build();
    public static final ItemHolder<Item> TIN_MORTAR = registry.item("tin_mortar", Item::new)
            .build();
    public static final ItemHolder<Item> TIN_PART = registry.item("tin_part", Item::new)
            .build();
    public static final ItemHolder<PickaxeItem> TIN_PICKAXE = registry.pickaxe("tin_pickaxe",TierRegistry.TIN)
            .build();
    public static final ItemHolder<Item> TIN_PLATE = registry.item("tin_plate", Item::new)
            .build();
    public static final ItemHolder<Item> TIN_RING = registry.item("tin_ring", Item::new)
            .build();
    public static final ItemHolder<ShovelItem> TIN_SHOVEL = registry.shovel("tin_shovel", TierRegistry.TIN)
            .build();
    public static final ItemHolder<Item> TIN_STICK = registry.item("tin_stick", Item::new)
            .build();
    public static final ItemHolder<SwordItem> TIN_SWORD = registry.sword("tin_sword", TierRegistry.TIN)
            .build();
    public static final ItemHolder<Item> TIN_WIRE = registry.item("tin_wire", Item::new)
            .build();
    public static final ItemHolder<Item> TIN_WRENCH = registry.item("tin_wrench", Item::new)
            .build();
    public static final ItemHolder<Item> TRITIUM_CELL = registry.item("tritium_cell", Item::new)
            .build();
    public static final ItemHolder<AxeItem> TUNGSTEN_AXE = registry.axe("tungsten_axe", TierRegistry.TUNGSTEN)
            .build();
    public static final ItemHolder<Item> TUNGSTEN_DUST = registry.item("tungsten_dust", Item::new)
            .build();
    public static final ItemHolder<HoeItem> TUNGSTEN_HOE = registry.hoe("tungsten_hoe", TierRegistry.TUNGSTEN)
            .build();
    public static final ItemHolder<Item> TUNGSTEN_INGOT = registry.item("tungsten_ingot", Item::new)
            .tag(TagRegistry.TUNGSTEN_INGOT)
            .build();
    public static final ItemHolder<PickaxeItem> TUNGSTEN_PICKAXE = registry.pickaxe("tungsten_pickaxe", TierRegistry.TUNGSTEN)
            .build();
    public static final ItemHolder<Item> TUNGSTEN_PLATE = registry.item("tungsten_plate", Item::new)
            .build();
    public static final ItemHolder<ShovelItem> TUNGSTEN_SHOVEL = registry.shovel("tungsten_shovel", TierRegistry.TUNGSTEN)
            .build();
    public static final ItemHolder<Item> TUNGSTEN_STICK = registry.item("tungsten_stick", Item::new)
            .build();
    public static final ItemHolder<SwordItem> TUNGSTEN_SWORD = registry.sword("tungsten_sword",TierRegistry.TUNGSTEN)
            .build();
    public static final ItemHolder<Item> TUNGSTEN_WIRE = registry.item("tungsten_wire", Item::new)
            .build();
    public static final ItemHolder<Item> URANIUM235 = registry.item("uranium235", Item::new)
            .build();
    public static final ItemHolder<Item> URANIUM235_CELL = registry.item("uranium235_cell", Item::new)
            .build();
    public static final ItemHolder<Item> URANIUM238 = registry.item("uranium238", Item::new)
            .build();
    public static final ItemHolder<Item> URANIUM238_CELL = registry.item("uranium238_cell", Item::new)
            .build();
    public static final ItemHolder<Item> URANIUM_CELL = registry.item("uranium_cell", Item::new)
            .build();
    public static final ItemHolder<Item> URANIUM_DUST = registry.item("uranium_dust", Item::new)
            .build();
    public static final ItemHolder<Item> URANIUM_INGOT = registry.item("uranium_ingot", Item::new)
            .tag(TagRegistry.URANIUM_INGOT)
            .build();
    public static final ItemHolder<Item> VACUUM_TUBE = registry.item("vacuum_tube", Item::new)
            .build();
    public static final ItemHolder<Item> WATER_CELL = registry.item("water_cell", Item::new)
            .build();
    public static final ItemHolder<Item> WROUGHT_IRON_INGOT = registry.item("wrought_iron_ingot", Item::new)
            .tag(TagRegistry.WROUGHT_IRON_INGOT)
            .build();

    @SuppressWarnings("all")
    private static ModelFile energyMultiModel(ItemHolder<?> itemHolder, int data) {
        return new UncheckedModelFile(new ResourceLocation(itemHolder.get().getRegistryName().getNamespace(), itemHolder.get().getRegistryName().getPath() + "_" + data));
    }

    @SuppressWarnings("all")
    private static BiConsumer<ItemModelProvider, ItemHolder<?>> energyMultiModel(int length) {
        return (itemModelProvider, itemHolder) -> {
            ResourceLocation override = new ResourceLocation(EnergyTech.ID, "energy_v" + length);
            var item = itemHolder.get().getRegistryName();
            var builder = itemModelProvider.getBuilder(item.toString())
                    .parent(new ModelFile.UncheckedModelFile("item/generated"));
            named(override, itemModelProvider, item, builder, length);
        };
    }

    private static void named(ResourceLocation override, ItemModelProvider provider, ResourceLocation item, ItemModelBuilder in, int size) {
        for (int i = 0; i < size; i++) {
            in.override().predicate(override, i).model(modelFile(provider, item, i)).end();
        }
    }

    private static ModelFile modelFile(ItemModelProvider provider, ResourceLocation item, int index) {
        return provider.getBuilder(item.getNamespace() + ":" + item.getPath() + "_" + index)
                .parent(new ModelFile.UncheckedModelFile("item/generated"))
                .texture("layer0", new ResourceLocation(item.getNamespace(), "item/" + item.getPath()) + "_" + index);
    }

    /**
     * 绑定渲染相关内容
     */
    @OnlyIn(Dist.CLIENT)
    public static void clientSetup(FMLClientSetupEvent event) {
        event.enqueueWork(() -> {

        });
    }

    public static void initialize() {

    }
}
